Progress of Process(from fork to exit)

정리
Wait System Call in C - GeeksforGeeks
fork를 통해 부모프로세스와 동일한 구조를 가진 자식프로세스 생성
(copy on write 기법으로 가상메모리 상에서는 실제 4GB의 메모리이지만, 실제 물리메모리에서는 일부만 복사-커널을 공유!)

pid=fork()에서 fork 리턴값인 pid를 통해서 현재 프로세스가 부모 프로세스인지 자식 프로세스인지 구분
(자식 프로세스의 경우 pid=0, 부모프로세스일 경우 pid==getpid()를 만족할 것이다.)
각각의 프로세스의 PCB의 PC는 fork() 이후의 코드를 포인팅 할 것임)

자식 프로세스일 경우 exec()를 통해 새로운 프로세스(다른 프로세스)을 시행
(exec() 시스템콜 시행시 가상메모리상 TEXT, DATA, BSS 영역이 새로운 프로세스로 덮어씌워진다.
커널 영역 가상메모리는 물리메모리상 항상 공유하고 있기에 IPC 기법 서로 사용 가능)

조건문을 통해 부모 프로세스는 wait() 시스템콜을 통해 자식 프로세스가 종료될 때까지 기다림->리눅스 권장 프로세스 기법
child_pid=wait(NULL)로 지정시 부모 프로세스는 자식 프로세스가 종료될 때(exit)까지 기다린다.
자식 프로세스가 종료될 시 부모프로세스에게 시그널(SIGCHLD)를 전송
자식 프로세스가 종료된 이후 child_pid에는 자식 프로세스의 PID가 리턴

자식 프로세스가 종료된 후, 부모 프로세스 계속 진행